package com.wk.thread;
//wait set是一个虚拟的概念，每个Java类的实例都有一个wait set，当对象执行wait方法时，当前线程就会暂停，并进入该对象的wait set。
//当发生以下事件时，线程才会退出wait set：
//①有其它线程以notify方法唤醒该线程
//②有其它线程以notifyAll方法唤醒该线程
//③有其它线程以interrupt方法唤醒该线程
//④wait方法已到期
//java.lang.Thread类有一个interrupt方法，该方法直接对线程调用。当被interrupt的线程正在sleep或wait时，会抛出InterruptedException异常。
//事实上，interrupt方法只是改变目标线程的中断状态（interrupt status），而那些会抛出InterruptedException异常的方法，如wait、sleep、join等，都是在方法内部不断地检查中断状态的值。
public class TestSleep {

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		Thread t1 = new CountThread();
        t1.start();
        Thread.sleep(6000);
        System.out.println("即将中断阻塞");
        t1.interrupt();
	}

}
class CountThread extends Thread{
	
	public CountThread() {
		super("计数线程");
	}
	private int i=0;
	@Override
	public void run() {
		while (i<100) {
			System.out.println(this.getName() + "计数" + i);
			i++;
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				System.out.println("系统捕获了中断异常");
			}
		}
	}
}
